package com.aididi.designpatter;

/**
 * @Auther: xuzexiang
 * @Date: 2018-10-27 0027 09:12
 * @Description:    静态代理设计模式
 *  指由一个代理主题来操作真实主题，真实主题执行具体的业务操作，而代理主题负责其他相关业务的处理。比如生活中的通过代理访问网络，
 *  客户通过网络代理连接网络（具体业务），由代理服务器完成用户权限和访问限制等与上网相关的其他操作（相关业务）
 *
 *  缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.
 */
public class StaticProxyDemo {
    public static void main(String[] args) {
        Network net = null; // 定义接口对象
        net = new Proxy(new Real()); // 实例化代理，同时传入代理的真实操作
        net.browse(); // 调用代理的上网操作
    }
}
interface Network { // 定义Network接口
    public void browse(); // 定义浏览的抽象方法
}

class Real implements Network { // 真实的上网操作
    @Override
    public void browse() { // 覆写抽象方法
        System.out.println("上网浏览信息！");
    }
}
class Proxy implements Network { // 代理上网
    private Network network;

    public Proxy(Network network) {// 设置代理的真实操作
        this.network = network; // 设置代理的子类
    }

    public void check() { // 身份证验操作
        System.out.println("检查用户是否合法！");
    }

    @Override
    public void browse() {
        this.check(); // 调用具体的代理业务操作
        this.network.browse(); // 调用真实的上网操作
    }
}


